FFMPEG 合并视频文件(无损)

您所在的位置:网站首页 ffmpeg 合并视频 FFMPEG 合并视频文件(无损)

FFMPEG 合并视频文件(无损)

2023-06-26 10:53| 来源: 网络整理| 查看: 265

FFMPEG 合并视频文件(无损) 前言

最近在做视频转码相关业务,但是片源商给了一些DVD的零散视频片段,需要自己去合并片段并进行业务转码,本篇文章主要记录视频合并的过程及常见的合并方式。

环境

FFMPEG BUILDS 4.4.1

FFmpeg Builds

GeForce GTX 1060(NVIDIA)

显卡支持列表

windows 10

OVB格式视频文件

VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB VTS_01_4.VOB VTS_01_5.VOB

视频合并方式 concat 分离器 新建 merge.txt file 'VTS_01_1.VOB' file 'VTS_01_2.VOB' file 'VTS_01_3.VOB' file 'VTS_01_4.VOB' file 'VTS_01_5.VOB' 复制代码 合并视频文件 ffmpeg -f concat -safe 0 -i merge.txt -c copy vts.mp4 复制代码

PS:如果使用的是相对路径可以不加 -safe 0

文件列表生成技巧

如果视频文件过多,merge.txt 复制很繁琐,所以可以使用命令来快速生成文件列表文件。

windows

(for %i in (*.VOB) do @echo file '%i') > merge.txt 复制代码

PS:*.VOB 代表视频文件后缀。

linux

# bash for f in *.wav; do echo "file '$f'" >> merge.txt; done # printf printf "file '%s'\n" *.wav > merge.txt 复制代码 concat 协议 缺点

这种方式使用范围比较小,只适合MPEG等视频格式;

合并视频 ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy merge.ts 复制代码 拓展

如果是其他格式文件,则可以先转码在合并,例如

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4 复制代码

PS:-movflags +faststart 使用这两个属性生成的文件可以边下边看。

concat 过滤器(有损) 说明

过滤器适用于同步视频和音频流的段。所有段都必须具有相同数量的每种类型的流,并且也将是输出时的流数。

合并视频 ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \ -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" output.mkv 复制代码

PS:输入流有三个,分别是input1.mp4 、 input2.webm 和 input3.mov ,然后告诉ffmpeg取出视频中的视频流及音频流,使用concat过滤器,告知它有三个视频流,他们都分别有一个视频流及一个音频流,连接并产生新的视频流[outv]及音频流[outa],然后映射新的视频流及音频流到新的文件 output.mkv。

总结

以上就是使用FFMPEG合并视频的方式及过程,各种方式各有利弊,推荐 concat分离器 > concat协议 > concat过滤器 ,不能说哪种方式最好,只能根据实际情况来选择,如果大家有更好的方式或者建议,欢迎讨论。

\



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3